home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / BaseFlavor.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  11.4 KB  |  347 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.util.StringUtilities;
  5. import com.extensibility.xml.dt.DataType;
  6. import com.extensibility.xml.dt.DataTypeEnumeration;
  7. import com.extensibility.xml.dt.DataTypeFactory;
  8. import com.extensibility.xml.dt.DataTypeIntf;
  9. import com.extensibility.xml.dt.Facet;
  10. import java.io.FileNotFoundException;
  11. import java.io.IOException;
  12. import java.io.Writer;
  13. import java.util.Hashtable;
  14. import java.util.MissingResourceException;
  15. import java.util.ResourceBundle;
  16. import java.util.Vector;
  17.  
  18. public abstract class BaseFlavor implements SchemaFlavorIntf {
  19.    protected SchemaIntf schema;
  20.    public static String FLAVOR_UNDETERMINED = "#FLAVOR_UNDETERMINED#";
  21.    public static String FLAVOR_INVALID = "#FLAVOR_INVALID#";
  22.    DTDFactory parserFactory;
  23.    public static final String[] ALL_TYPES;
  24.    public static final String[] OTHER_TYPES;
  25.    public static final String[] SIMPLE_TYPES;
  26.    public static final String[] ATTR_TYPES;
  27.    static ResourceBundle displayNamesBundle;
  28.    static Hashtable sourceNames;
  29.  
  30.    protected BaseFlavor(SchemaIntf var1) {
  31.       this.schema = var1;
  32.    }
  33.  
  34.    public abstract String getFlavorName();
  35.  
  36.    public void checkContentModel(String var1, String var2, boolean var3) throws ParserException {
  37.       this.getParserDTDFactory().checkContentModel(var1, var2, var3);
  38.    }
  39.  
  40.    public void updateContentModel(ContentModelOwner var1, String var2, boolean var3) throws ParserException {
  41.       this.getParserDTDFactory().updateContentModel(var1, var2, var3);
  42.    }
  43.  
  44.    public void checkAttributeGroup(String var1, String var2) throws ParserException {
  45.       this.getParserDTDFactory().checkAttributeGroup(var1, var2);
  46.    }
  47.  
  48.    public boolean updateAttributeGroup(AttributeDeclaration.Owner var1, String var2) throws ParserException {
  49.       return this.getParserDTDFactory().updateAttributeGroup(var1, var2, true);
  50.    }
  51.  
  52.    protected DTDFactory getParserDTDFactory() {
  53.       if (this.parserFactory == null) {
  54.          this.parserFactory = new DTDFactory((Schema)this.schema);
  55.       }
  56.  
  57.       return this.parserFactory;
  58.    }
  59.  
  60.    public int insertSubset(ExternalPEDeclaration var1) throws IOException {
  61.       boolean var2 = true;
  62.       ExternalSubset var3 = this.schema.getStructure().findParent(((BaseDeclaration)var1).getURI());
  63.       if (this.schema.isSupported("GESTALT_MULTI_INSTANCE_MODULES")) {
  64.          var2 = this.schema.getStructure().findParent(((EntityDeclaration)var1).getSystemID()) == null;
  65.       }
  66.  
  67.       ExternalSubset var4 = new ExternalSubset(var3, var1);
  68.       ((BaseDeclaration)var4).setURI(((BaseDeclaration)var1).getURI());
  69.       this.schema.insertDeclaration(var4, (BaseDeclaration)null);
  70.       int var5 = this.schema.getParseErrors().size();
  71.       if (var2) {
  72.          URI var6 = var4.getSystemURI();
  73.          var6 = this.resolveLogical(var6, false);
  74.          this.parse(var6, var4.getSystemURI(), this.schema.indexOf(var4) + 1, Boolean.FALSE);
  75.       }
  76.  
  77.       return var5 - this.schema.getParseErrors().size();
  78.    }
  79.  
  80.    public void write(Writer var1) throws IOException {
  81.       this.write(var1, this.schema.getURI());
  82.    }
  83.  
  84.    public abstract void write(Writer var1, URI var2) throws IOException;
  85.  
  86.    public void checkForErrors(BaseDeclaration var1) {
  87.       if (var1 != null) {
  88.          var1.checkForErrors(this.schema);
  89.          this.checkForValidNMTOKENS(var1);
  90.       } else {
  91.          if (this.isSupported("GESTALT_ONE_PASS")) {
  92.             Hashtable var2 = new Hashtable();
  93.  
  94.             for(int var3 = 0; var3 < this.schema.getCount(); ++var3) {
  95.                BaseDeclaration var4 = this.schema.getIndDeclaration(var3);
  96.                Vector var5 = var4.getPrerequisites(this.schema);
  97.  
  98.                for(int var6 = 0; var6 < var5.size(); ++var6) {
  99.                   if (!var2.containsKey(var5.elementAt(var6))) {
  100.                      Debug.assert(var5.elementAt(var6) != var4, "self as prerequisite!");
  101.                      var4.errors.addElement(new ParserException(230, ((BaseDeclaration)var5.elementAt(var6)).getName()));
  102.                   }
  103.                }
  104.  
  105.                var2.put(var4, var4);
  106.             }
  107.          }
  108.  
  109.       }
  110.    }
  111.  
  112.    public void doSecondPassValidation(URI var1) {
  113.    }
  114.  
  115.    public void checkForValidNMTOKENS(BaseDeclaration var1) {
  116.       if (this.schema.isSupported("GESTALT_NMTOKEN_ENUM_REQUIRED") && var1 != null && var1 instanceof AttributeDeclaration) {
  117.          DataType var2 = ((AttributeDeclaration)var1).getDataType();
  118.          if (var2 != null && var2.isEnumeration()) {
  119.             Vector var3 = ((AttributeDeclaration)var1).getChoices();
  120.             if (var3 != null && var3.size() > 0) {
  121.                if (var3.size() != 1 || ((String)var3.elementAt(0)).length() != 0) {
  122.                   for(int var4 = 0; var4 < var3.size(); ++var4) {
  123.                      String var5 = (String)var3.elementAt(var4);
  124.                      if (this.getFlavorName().equals(DTDFlavor.NAME) && DTDUtilities.isPEName(var5)) {
  125.                         var5 = DTDUtilities.convertPEName(var5, false);
  126.                         if (this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.InternalPEDeclaration")) == null) {
  127.                            var1.addError(new ParserException(69, var5));
  128.                         }
  129.                      }
  130.  
  131.                      if (!DTDParser.isNmToken((String)var3.elementAt(var4))) {
  132.                         var1.addError(new ParserException(217, (String)var3.elementAt(var4)));
  133.                      }
  134.                   }
  135.                } else {
  136.                   var1.addError(new ParserException(233, ""));
  137.                }
  138.             } else {
  139.                var1.addError(new ParserException(233, ""));
  140.             }
  141.          }
  142.       }
  143.  
  144.    }
  145.  
  146.    public abstract void parse(URI var1, URI var2, int var3, Object var4) throws IOException;
  147.  
  148.    public abstract String getSourcePreview(BaseDeclaration var1);
  149.  
  150.    public boolean isCompleteAndConsistent() {
  151.       return true;
  152.    }
  153.  
  154.    public URI getSchemaLoc(NamespaceDeclaration var1) {
  155.       String var2 = var1.getNamespace();
  156.       return var2 == null ? null : new URI(var2);
  157.    }
  158.  
  159.    public BaseExemplar createExemplar(SchemaIntf var1) {
  160.       return new BaseExemplar(var1);
  161.    }
  162.  
  163.    public abstract boolean isSupported(Class var1);
  164.  
  165.    public boolean isSupported(String var1) {
  166.       if (var1 == "GESTALT_KLEENE_OCCURS") {
  167.          return true;
  168.       } else {
  169.          return var1 == "GESTALT_FACET_ENUM";
  170.       }
  171.    }
  172.  
  173.    public DataTypeEnumeration getAllTypes() {
  174.       return DataTypeFactory.getTheseTypes(ALL_TYPES);
  175.    }
  176.  
  177.    public DataTypeEnumeration getSimpleTypes() {
  178.       return DataTypeFactory.getTheseTypes(SIMPLE_TYPES);
  179.    }
  180.  
  181.    public DataTypeEnumeration getPrimitiveTypes() {
  182.       return DataTypeFactory.getTheseTypes(ATTR_TYPES);
  183.    }
  184.  
  185.    public DataTypeEnumeration getOtherTypes() {
  186.       return DataTypeFactory.getTheseTypes(OTHER_TYPES);
  187.    }
  188.  
  189.    public boolean isValidValue(DataTypeIntf var1, String var2) {
  190.       if (var1 == null) {
  191.          return true;
  192.       } else if (var1.equalsSource(DataTypeIntf.BOOLEAN)) {
  193.          return var2.equals("true") || var2.equals("false");
  194.       } else {
  195.          if (var1.hasEnumeration()) {
  196.             Facet var3 = var1.getFacet(Facet.FACET_ENUM_NAME);
  197.             Vector var4 = (Vector)var3.getValue();
  198.             if (var4 != null) {
  199.                String[] var5 = StringUtilities.getSingleQuotedStrings(var4);
  200.  
  201.                for(int var6 = 0; var6 < var5.length; ++var6) {
  202.                   if (var2.equals(var5[var6])) {
  203.                      return true;
  204.                   }
  205.                }
  206.  
  207.                return false;
  208.             }
  209.          }
  210.  
  211.          return true;
  212.       }
  213.    }
  214.  
  215.    public String getDataTypeDisplay(DataTypeIntf var1) {
  216.       return var1.isPE() ? var1.getDisplay() : getDisplay(this.getFlavorName(), var1.getSource());
  217.    }
  218.  
  219.    public String getDataTypeSource(DataTypeIntf var1) {
  220.       return var1.isPE() ? var1.getSource() : getSourceCode(this.getFlavorName(), var1.getSource());
  221.    }
  222.  
  223.    public String getBaseTypeDisplay(DataTypeIntf var1) {
  224.       return var1.isPE() ? "" : getDisplay(this.getFlavorName(), var1.getBaseType());
  225.    }
  226.  
  227.    public String getBaseTypeSource(DataTypeIntf var1) {
  228.       return var1.isPE() ? "" : getSourceCode(this.getFlavorName(), var1.getBaseType());
  229.    }
  230.  
  231.    public boolean isKnownDisplay(String var1) {
  232.       String var2 = (String)sourceNames.get(var1);
  233.       return var2 == null ? false : DataTypeFactory.isKnown(var2);
  234.    }
  235.  
  236.    public DataType createDataTypeFromDisplay(String var1) {
  237.       String var2 = (String)sourceNames.get(var1);
  238.       if (var2 == null) {
  239.          var2 = var1;
  240.       }
  241.  
  242.       return DataTypeFactory.createDataType(var2);
  243.    }
  244.  
  245.    public static void loadDisplayNames() {
  246.       sourceNames = new Hashtable();
  247.  
  248.       for(int var0 = 0; var0 < ALL_TYPES.length; ++var0) {
  249.          sourceNames.put(getDisplay(ALL_TYPES[var0]), ALL_TYPES[var0]);
  250.       }
  251.  
  252.    }
  253.  
  254.    public static void setDisplayNameBundle(ResourceBundle var0) {
  255.       displayNamesBundle = var0;
  256.    }
  257.  
  258.    static ResourceBundle getDisplayNameBundle() {
  259.       return displayNamesBundle;
  260.    }
  261.  
  262.    protected static String getDisplay(String var0) {
  263.       if (displayNamesBundle == null) {
  264.          return var0;
  265.       } else {
  266.          try {
  267.             String var1 = displayNamesBundle.getString(var0);
  268.             return var1;
  269.          } catch (MissingResourceException var3) {
  270.             return var0;
  271.          }
  272.       }
  273.    }
  274.  
  275.    public static String getDisplay(String var0, String var1) {
  276.       if (displayNamesBundle == null) {
  277.          return var1;
  278.       } else {
  279.          try {
  280.             String var2 = displayNamesBundle.getString(String.valueOf(String.valueOf(var0).concat(String.valueOf(".sd."))).concat(String.valueOf(var1)));
  281.             return var2;
  282.          } catch (MissingResourceException var4) {
  283.             String var3 = getDisplay(var1);
  284.             return var3;
  285.          }
  286.       }
  287.    }
  288.  
  289.    public static String getSourceCode(String var0, String var1) {
  290.       if (displayNamesBundle == null) {
  291.          return var1;
  292.       } else {
  293.          try {
  294.             String var2 = displayNamesBundle.getString(String.valueOf(String.valueOf(var0).concat(String.valueOf(".sc."))).concat(String.valueOf(var1)));
  295.             return var2;
  296.          } catch (MissingResourceException var4) {
  297.             return var1;
  298.          }
  299.       }
  300.    }
  301.  
  302.    protected String getSourceFromDisplay(String var1) {
  303.       String var2 = (String)sourceNames.get(var1);
  304.       if (var2 == null) {
  305.          var2 = var1;
  306.       }
  307.  
  308.       return var2;
  309.    }
  310.  
  311.    protected String getSourceFromDisplay(String var1, String var2) {
  312.       if (displayNamesBundle == null) {
  313.          return var2;
  314.       } else {
  315.          try {
  316.             String var3 = displayNamesBundle.getString(String.valueOf(String.valueOf(var1).concat(String.valueOf(".ds."))).concat(String.valueOf(var2)));
  317.             return var3;
  318.          } catch (MissingResourceException var5) {
  319.             return var2;
  320.          }
  321.       }
  322.    }
  323.  
  324.    public URI resolveLogical(URI var1, boolean var2) throws FileNotFoundException {
  325.       String var3 = var1.toSource();
  326.       if (!var1.exists()) {
  327.          var1 = this.schema.resolveModuleURI(var1);
  328.          if (var1 == null) {
  329.             if (!var2) {
  330.                throw new FileNotFoundException(var3);
  331.             }
  332.  
  333.             var1 = URI.makeStringURI("");
  334.          }
  335.       }
  336.  
  337.       return var1;
  338.    }
  339.  
  340.    static {
  341.       ALL_TYPES = new String[]{DataTypeIntf.STRING, DataTypeIntf.NUMBER, DataTypeIntf.INT, DataTypeIntf.DECIMAL, DataTypeIntf.FLOAT, DataTypeIntf.BOOLEAN, DataTypeIntf.DATETIME, DataTypeIntf.DATE, DataTypeIntf.TIME, DataTypeIntf.URI, DataTypeIntf.ID, DataTypeIntf.IDREF, DataTypeIntf.IDREFS, DataTypeIntf.ENTITY, DataTypeIntf.ENTITIES, DataTypeIntf.NMTOKEN, DataTypeIntf.NMTOKENS, DataTypeIntf.NOTATION, DataTypeIntf.ENUMERATION, DataTypeIntf.FIXED144, DataTypeIntf.DATETIMETZ, DataTypeIntf.TIMETZ, DataTypeIntf.INTERVAL, DataTypeIntf.I1, DataTypeIntf.I2, DataTypeIntf.I4, DataTypeIntf.I8, DataTypeIntf.UI1, DataTypeIntf.UI2, DataTypeIntf.UI4, DataTypeIntf.UI8, DataTypeIntf.R4, DataTypeIntf.R8, DataTypeIntf.UUID, DataTypeIntf.BINHEX, DataTypeIntf.BINBASE64, DataTypeIntf.CHAR};
  342.       OTHER_TYPES = new String[]{DataTypeIntf.FIXED144, DataTypeIntf.DATETIMETZ, DataTypeIntf.TIMETZ, DataTypeIntf.INTERVAL, DataTypeIntf.I1, DataTypeIntf.I2, DataTypeIntf.I4, DataTypeIntf.I8, DataTypeIntf.UI1, DataTypeIntf.UI2, DataTypeIntf.UI4, DataTypeIntf.UI8, DataTypeIntf.R4, DataTypeIntf.R8, DataTypeIntf.UUID, DataTypeIntf.BINHEX, DataTypeIntf.BINBASE64, DataTypeIntf.CHAR};
  343.       SIMPLE_TYPES = new String[]{DataTypeIntf.STRING, DataTypeIntf.NUMBER, DataTypeIntf.INT, DataTypeIntf.DECIMAL, DataTypeIntf.FLOAT, DataTypeIntf.BOOLEAN, DataTypeIntf.DATETIME, DataTypeIntf.DATE, DataTypeIntf.TIME, DataTypeIntf.URI};
  344.       ATTR_TYPES = new String[]{DataTypeIntf.STRING, DataTypeIntf.ID, DataTypeIntf.IDREF, DataTypeIntf.IDREFS, DataTypeIntf.ENTITY, DataTypeIntf.ENTITIES, DataTypeIntf.NMTOKEN, DataTypeIntf.NMTOKENS, DataTypeIntf.NOTATION, DataTypeIntf.ENUMERATION};
  345.    }
  346. }
  347.